object
    : '{''}'
    | '{' members '}' ;
    
members
    : pair
    : pair , members ;

pair
    : string ':' value ;

array
	: '[' elements* ']' ;

elements
	: value
	| value ',' elements ;

value
	: string
	| NUMBER
	| object
	| array
	| 'true'
	| 'false'
	| 'null' ; 
	
string
	: '\'' chars '\'' ;

chars
	: CHAR
	| CHAR chars;
	
CHAR
	: . ;

NUMBER
    :   [0-9]+ \. [0-9]* Exponent?  
    |   \. [0-9]+ Exponent?  
    |   [0-9]+ Exponent  
    |   [0-9]+ ;

EXPONET    
    :   ( 'e' | 'E' ) ( '+' | '-' )? [0-9]+ 
    ;